@echo off
setlocal enabledelayedexpansion

:open
cls & echo === 开始检测 IPv4 线路 ===
ping 8.8.8.8
if %ERRORLEVEL%==1 goto BothFail

cls & echo === 开始检测 IPv6 线路 ===
ping speed.neu6.edu.cn
if %ERRORLEVEL%==0 goto Ok

cls & echo IPv6 ping 失败，尝试使用 curl 检测 IPv6 可用性...
set "v6addr="

:: 获取 curl 返回内容（不输出错误信息），注意此处会等待 curl 命令执行
for /f "delims=" %%i in ('curl -s 6.ipw.cn 2^>nul') do (
    set "v6addr=%%i"
)

:: 如果返回为空，则认为失败
if "!v6addr!"=="" goto No

:: 如果非空，则认为 IPv6 正常
goto Ok

:No
COLOR 74
cls & echo [警告] IPv6 状态异常 %date% %time%
:: 如果需要可启用日志记录（删除下面两行前面的 :: 号）
:: echo V6连接失败 %date%_%time%>>netconnect.txt
echo 禁用指定网络适配器...
netsh interface set interface "WINNET" admin=DISABLED
ping 127.0.1 /n 5 >nul
echo 启用指定网络适配器...
netsh interface set interface "WINNET" admin=ENABLED
ping 127.0.1 /n 20 >nul
goto open

:BothFail
COLOR 47
cls & echo [错误] IPv4 状态异常，暂不进行网络重启 %date% %time%
:: 如果需要可启用日志记录（删除下面两行前面的 :: 号）
:: echo V4连接失败 %date%_%time%>>netconnect.txt
ping 127.0.1 /n 60 >nul
goto open

:Ok
COLOR E2
cls & echo [正常] IPv6 状态正常 %date% %time%
ping 127.0.1 /n 300 >nul
goto open

:: ver. 2.5.5：优化 curl 检测逻辑，仅判断是否为空作为失败依据，
:: 避免因 bat 脚本环境中错误输出被隐藏导致误判。